
package primitives;

import org.nlogo.api.Reporter;

import de.berlin.fu.inf.nbi.rdflinda.numbers.*;

public enum SwarmLindaPrimitive
{
    CONTAINS_SET(
        "contains-set?",
        ":\t\tChecks if the given set of elements is contained in the given list of sets. Returns true or false.",
        new ContainsSetValidator()),
    GET_NEXT_FILENAME(
        "get-next-filename",
        ":\t\tReturns a filename for snapshot files appended with a serial number.",
        new FilenameGeneration()),
    GET_PRIMITIVES(
        "get-primitives", ":\t\tReturns all additional primitives with description.",
        new PrimitivesLister()),
    MAX_DOUBLE(
        "max-double",
        ":\t\t\tA constant holding the maximum value a 'double' can have, (2 - 2^-52) * 2^1023.",
        new MaxDouble()),
    MAX_INT(
        "max-int", ":\t\t\tA constant holding the maximum value an 'int' can have, (2^31)-1.",
        new MaxInt()),
    MIN_DOUBLE(
        "min-double",
        ":\t\t\tA constant holding the smallest positive nonzero value of type double, 2^-1074.",
        new MinDouble()),
    MIN_INT(
        "min-int", ":\t\t\tA constant holding the minimum value an 'int' can have, -2^31.",
        new MinInt()),
    REAL_RANDOM_DOUBLE(
        "real-random-double", ":\t\tGenerates a random double value. Workaround for NetLogo bug",
        new RandomDouble()),
    REAL_RANDOM_INT(
        "real-random-int", ":\t\tGenerates a random integer value. Workaround for NetLogo bug.",
        new RandomInt());

    private final String   description;
    private final String   primitive;
    private final Reporter reporter;

    private SwarmLindaPrimitive(String primitive, String description, Reporter reporter) {
        this.primitive = primitive;
        this.description = description;
        this.reporter = reporter;
    }

    public String getDescription() {
        return description;
    }

    public String getPrimitive() {
        return primitive;
    }

    public Reporter getReporter() {
        return reporter;
    }

}
